using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ModelTools._ModelOnly
{
    /// <summary>
    /// <para>Collect Values</para>
    /// <para>Collects output values from an iterator or converts a list of values into a single input. The output of Collect Values can be used as input to the Merge, Append, Mosaic, and Cell Statistics tools.</para>
    /// <para>从迭代器收集输出值或将值列表转换为单个输入。“收集值”的输出可用作“合并”、“追加”、“镶嵌”和“单元格统计”工具的输入。</para>
    /// </summary>    
    [DisplayName("Collect Values")]
    public class CollectValues : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CollectValues()
        {

        }
        public override string ToolboxName => "Model Tools";

        public override string ToolName => "Collect Values";

        public override string CallName => "mb.CollectValues";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_value, _out_value];

        /// <summary>
        /// <para>Input Value</para>
        /// <para>The input values to be collected.</para>
        /// <para>要收集的输入值。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _in_value { get; set; } = null;


        /// <summary>
        /// <para>Output Values</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Values")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_value { get; set; }


        public CollectValues SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}